汇川中型PLC使用ST语言基础

您所在的位置:网站首页 plc pls指令有什么用 汇川中型PLC使用ST语言基础

汇川中型PLC使用ST语言基础

2023-10-17 23:26| 来源: 网络整理| 查看: 265

上位机与PLC基于Modbus交互,参考的文章:modbus协议讲解,上位机与PLC交互_花开莫与流年错_的博客-CSDN博客

中型PLC使用基础汇报:https://pan.baidu.com/s/1UmbaMECPd0oYZPm70rYKbg

初始化

// IO初始化 IO_point := ADR(START_IO); // 当前指针类型每次复位8个位,复位START_IO开始的5*8个位 FOR i := 0 TO num_IO BY 1 DO IO_point^ := 0; IO_point := IO_point + 1; END_FOR  // 伺服参数初始化,根据伺服个数修改for循环次数 FOR i := 0 TO 1 BY 1 DO 单轴变量[i].gear_in := FALSE; 单轴变量[i].转矩运行 := FALSE; 单轴变量[i].速度运行 := FALSE; 单轴变量[i].绝对位移 := FALSE; 单轴变量[i].相对位移 := FALSE; END_FOR  // 确定伺服通讯连接正常 IF ETHERCAT.xConfigFinished AND ETHERCAT.xDistributedClockInSync THEN   IF fangxian.wCommunicationState=100 THEN   EtherCAT_State:=TRUE;   ELSE    EtherCAT_State:=FALSE;   END_IF END_IF

自动模式

// 动作分步运行,完成动作后运行步骤 + 1 CASE 运行步骤 OF 0 : // 给定变量初始值、标志位复位 运行步骤 := 运行步骤 + 1; 1 : // 动作1 2 : // 动作2 3 : // 动作3 ELSE // 动作完成处理 END_CASE

伺服控制:

1、定义伺服名(Axis_Name)

// 使用时根据现场伺服完成下列伺服命名 TYPE Axis_Name : ( 虚主轴 := 0, 放线轴 := 1 ); END_TYPE

2、伺服控制参数-结构体(PointAxis)

// 单轴控制相关参数 TYPE PointAxis : STRUCT 使能 : BOOL; // 基础参数 使能ok : BOOL; 暂停 : BOOL; 快速停机 : BOOL; 回原 : BOOL; 故障复位 : BOOL; 模式切换 : BOOL; 重启运行 : BOOL; // 遇到故障伺服重启 重启完成 : BOOL; // 运行中遇到故障可进行伺服重新初始化 转矩运行 : BOOL; // 转矩运行 转矩大小 : LREAL; 绝对位移 : BOOL; // 绝对运行 绝对位移方向 : MC_Direction; 绝对位置 : LREAL; 相对位移 : BOOL; // 相对运行 相对距离 : LREAL; 速度运行 : BOOL; // 速度控制 速度运行方向 : MC_Direction; 速度运行速度 : LREAL := 100; 加速度值 : LREAL := 100; // 运动参数 减速度值 : LREAL := 100; 加加速值 : LREAL := 10; 原点位置 : LREAL; gear_in : BOOL; // 进入电子凸轮 gearNum : DINT; // 齿轮比分子 gearDeno : UINT; // 齿轮比分母 gearMaster : AXIS_REF_SM3; // 电子凸轮主轴 控制模式 : SMC_CONTROLLER_MODE; Axis : POINTER TO AXIS_REF_ETC_DS402_CS; Server: POINTER TO ETCSlave; END_STRUCT END_TYPE

3、定义伺服控制参数数组(Axis)

//{attribute 'qualified_only'} VAR_GLOBAL // 0.。10中的10需要根据总的伺服数量设置,并将对应Axis_Name改变 单轴变量 : ARRAY[0..1] OF PointAxis; END_VAR

4、伺服动作实现参数(MC_PointAxis)

(1)变量定义:   

 FUNCTION_BLOCK MC_PointAxis     VAR_IN_OUT             Point_Axis : PointAxis;     END_VAR     VAR         power : MC_Power; // 使能      halt : MC_Halt; // 暂停      stop : MC_Stop; // 停机      home : MC_Home; // 回零      reset : MC_Reset; // 故障复位      reinitDrive : SMC3_ReinitDrive; // 重启驱动      setControllerMode : SMC_SetControllerMode; // 设置控制模式      setTorque : SMC_SetTorque; // 转矩运行      moveAbsolute : MC_MoveAbsolute; // 绝对位移      moveRelative : MC_MoveRelative; // 相对位移      moveVelocity : MC_MoveVelocity; // 速度运行           gearIn : MC_GearIn; // 进入电子凸轮      gearOut : MC_GearOut; // 退出电子凸轮           camTableSelect : MC_CamTableSelect; // cam表设置      camIn : MC_CamIn; // 进入cam表      camOut : MC_CamOut; // 退出cam表            // 后续修改      去使能 : BOOL;     END_VAR

(2)函数调用:

// 伺服基础指令 power(Axis := Point_Axis.Axis^, Enable := TRUE, bRegulatorOn := Point_Axis.使能 AND (NOT 去使能),  bDriveStart := Point_Axis.使能, Status      => Point_Axis.使能ok);   // 暂停             halt(Axis := Point_Axis.Axis^,  Execute := Point_Axis.暂停,  Deceleration := Point_Axis.减速度值); // 重启伺服 reinitDrive(Axis := Point_Axis.Axis^, bExecute := Point_Axis.重启运行, bVirtual := FALSE, // 目前默认为实轴,不是虚轴 bDone => Point_Axis.重启完成); // 停机             stop(Axis := Point_Axis.Axis^,  Execute := Point_Axis.快速停机,  Deceleration := Point_Axis.减速度值,  Jerk := Point_Axis.加加速值); // 回零             home(Axis := Point_Axis.Axis^, Execute := Point_Axis.回原, Position := Point_Axis.原点位置); // 故障复位             reset(Axis := Point_Axis.Axis^, Execute := Point_Axis.故障复位); // 设置控制模式 setControllerMode(Axis := Point_Axis.Axis^, bExecute := Point_Axis.模式切换, nControllerMode := Point_Axis.控制模式); // 转矩运行 setTorque(Axis := Point_Axis.Axis^, bEnable := Point_Axis.转矩运行, fTorque := Point_Axis.转矩大小); // 绝对位移 moveAbsolute(Axis := Point_Axis.Axis^, Execute := Point_Axis.绝对位移, Position := Point_axis.绝对位置, Direction := Point_axis.绝对位移方向, Acceleration := Point_Axis.加速度值, Deceleration := Point_Axis.减速度值, Jerk := Point_Axis.加加速值); // 相对位移 moveRelative(Axis := Point_Axis.Axis^, Execute := Point_Axis.相对位移, Distance := Point_Axis.相对距离, Acceleration := Point_Axis.加速度值, Deceleration := Point_Axis.减速度值, Jerk := Point_Axis.加加速值); // 速度运行             moveVelocity(Axis := Point_Axis.Axis^, Execute := Point_axis.速度运行, Velocity := Point_axis.速度运行速度, Direction := Point_axis.速度运行方向, Acceleration := Point_Axis.加速度值, Deceleration := Point_Axis.减速度值, Jerk := Point_Axis.加加速值); // 加入电子凸轮运行,主轴为PointAxis中设置主轴。 // 使用需根据需要设置齿轮比,或PID实时调节齿轮比 gearIn(Execute := Point_Axis.gear_in, Master := Point_Axis.gearMaster, Slave := Point_Axis.Axis^, RatioNumerator := Point_Axis.gearNum, RatioDenominator := Point_Axis.gearDeno); // 退出凸轮同步控制 gearOut(Execute := NOT Point_Axis.gear_in, Slave := Point_Axis.Axis^); // cam表之后根据实际使用再配置使用

5、参数更新(update)

// 伺服参数更新程序需要配置为优先级最高,且执行周期和同步周期成正比 // 将伺服与结构体变量参数映射使用,需要分为三个部分,根据后续需要添加轴 // 定时更新逻辑程序中的数据与伺服匹配动作 // 轴参数映射 // 单轴变量[虚主轴].Axis := (ADR(Axis_Virtual_Main)); 单轴变量[放线轴].Axis := (ADR(fangxian)); // 伺服参数映射修改 单轴变量[放线轴].Server := (ADR(IS620N)); // 运动函数功能块调用更新 PointAxis_放线轴(Point_Axis := 单轴变量[放线轴]);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3